]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
popupMenu: Turn Switch state into a GObject property
authorFlorian Müllner <fmuellner@gnome.org>
Tue, 21 Jan 2020 13:52:15 +0000 (14:52 +0100)
committerFlorian Müllner <florian.muellner@gmail.com>
Wed, 22 Jan 2020 21:55:28 +0000 (21:55 +0000)
A property is often more convenient than a method, as it can be used
with bind_property() and friends.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/239

js/ui/popupMenu.js

index 56638050f9589a427d4b4cb5c3f7b2247ac86e8d..3119124f971495b8529549a902197f253fac14c2 100644 (file)
@@ -305,25 +305,44 @@ class PopupSeparatorMenuItem extends PopupBaseMenuItem {
     }
 });
 
-var Switch = GObject.registerClass(
-class Switch extends St.Bin {
+var Switch = GObject.registerClass({
+    Properties: {
+        'state': GObject.ParamSpec.boolean(
+            'state', 'state', 'state',
+            GObject.ParamFlags.READWRITE,
+            false),
+    },
+}, class Switch extends St.Bin {
     _init(state) {
-        super._init({ style_class: 'toggle-switch',
-                      accessible_role: Atk.Role.CHECK_BOX,
-                      can_focus: true });
-        this.setToggleState(state);
+        this._state = false;
+
+        super._init({
+            style_class: 'toggle-switch',
+            accessible_role: Atk.Role.CHECK_BOX,
+            can_focus: true,
+            state,
+        });
     }
 
-    setToggleState(state) {
+    get state() {
+        return this._state;
+    }
+
+    set state(state) {
+        if (this._state === state)
+            return;
+
         if (state)
             this.add_style_pseudo_class('checked');
         else
             this.remove_style_pseudo_class('checked');
-        this.state = state;
+
+        this._state = state;
+        this.notify('state');
     }
 
     toggle() {
-        this.setToggleState(!this.state);
+        this.state = !this.state;
     }
 });
 
@@ -393,7 +412,7 @@ var PopupSwitchMenuItem = GObject.registerClass({
     }
 
     setToggleState(state) {
-        this._switch.setToggleState(state);
+        this._switch.state = state;
         this.checkAccessibleState();
     }